home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1998 July / EnigmA AMIGA RUN 29 (1998)(G.R. Edizioni)(IT)[!][issue 1998-07 & 08].iso / recent / ecompile.lha / ECompile / ECompile.ced next >
Text File  |  1998-04-20  |  11KB  |  392 lines

  1. /*  $VER: ECompile.ced 2.11 (27.12.97) Copyright © 1996-97 Davinja Software
  2. */
  3.  
  4. ECPath='AmigaE:bin/EC'  /* Change path to your EC or if you got a 'path' */
  5.                         /* to it just write 'EC'.                        */
  6. ECOptions=''        /* Put the Default Options of the compiler here! */
  7.  
  8. /* -------------- Don't change anything bellow this line! -------------- */
  9.  
  10. Options Results
  11. Options Failat 21
  12. NL='0A'X
  13. CEDPort=Address()
  14.  
  15. If ~Show('L','rexxreqtools.library') then 
  16. If ~Addlib('rexxreqtools.library',0,-30,0) then do
  17.    Say 'Could not open rexxreqtools.library.  Quiting.'
  18.    Exit 20
  19. End
  20.  
  21. If ~Show('P',CEDPort) then do
  22.    RTEZRequest("CygnusEd ARexx Port not found!",'_Quit',,'rt_reqpos=reqpos_centerwin')
  23.    Exit
  24. End
  25.  
  26. Address(CEDPort)
  27.  
  28. If (CEDPort='rexx_ced')|(CEDPort='CYGNUSED') then do
  29.    CEDScreen='CygnusEdScreen1'
  30. End
  31. Else do
  32.    CEDScreen='CygnusEdScreen'Right(CEDPort,1)+1
  33. End
  34. RTPAR='rt_reqpos=reqpos_centerwin rt_pubscrname='CEDScreen
  35.  
  36. If ~Exists(ECPath) then do
  37.    RTEZRequest('The E compiler could not be found!'NL'Check your EC path!','_Quit',,'rtez_flags=ezreqf_centertext' RTPAR)
  38.    Exit
  39. End
  40.  
  41. Status 'numchanges'
  42. EDChanges=Result
  43.  
  44. MAIN:
  45. Status 'dirname'
  46. ESourcePath=Result
  47. Status 'filename'
  48. ESourceFile=Result
  49. ESourceFilePref=(Left(ESourceFile,Length(ESourceFile)-2))
  50. Status 'restname'
  51. ESourceName=Result
  52. ESourceNamePref=(Left(ESourceName,Length(ESourceName)-2))
  53.  
  54. if ESourceName='' then do
  55.    RTEZRequest('The source is "Untitled"'NL' Should it be saved?','_Save as..|_Quit',' Save Source','rtez_flags=ezreqf_centertext' RTPAR)
  56.    If RTResult=0 then Exit
  57.    SAVE
  58.    Call MAIN
  59. End
  60. If (Upper(Right(ESourceFile,5))=='.EBAK') then do
  61.    RTEZRequest('"'ESourceName'"'NL'is an backup file,'NL'have to be changed!','_Save as...|_Quit',,'rtez_flags=ezreqf_centertext' RTPAR)
  62.    If RTResult=0 then Exit
  63.    ESourceFile=rtfilerequest(ESourcePath,,'Save Source as...','_Save','rtfi_flags=freqf_save')
  64.    'SAVE AS' ESourceFile
  65.    Call MAIN
  66. End
  67. If (Upper(Right(ESourceFile,2))~='.E')then do
  68.    RTEZRequest('"'ESourceName'"'NL'is not an ".e" file!!!','_Quit',,'rtez_flags=ezreqf_centertext' RTPAR)
  69.    Exit
  70. End
  71.  
  72. Parse Value Date(ORDERED) With YY'/'MM'/'DD
  73. DD=Trunc(DD)
  74. MM=Trunc(MM)
  75. YY=Trunc(YY)
  76. CURRDATE='('DD'.'MM'.'YY')'
  77.  
  78. Status 'cursorline'
  79. CR_LINE=Result+1
  80. Status 'cursorcolumn'
  81. CR_COL=Result+1
  82. Status 'displaylines'
  83. DISPLINES=Trunc((Result/2)-5)
  84.  
  85. DM 'Scanning for options...'
  86. Call GetOption("ECOptions") ; If Result~="ECOPTIONS" then ECOPTIONS=Result
  87. ECDUPPATH=GetOption("ECDupPath")
  88. ECBUMPREV=GetOption("ECBumpRev")
  89. ECNOBUMP=GetOption("ECNoBump")
  90. ECNOVER=GetOption("ECNoVer")
  91. ECCOMMENT=GetOption("ECComment")
  92. ECPPSET=GetOption("ECPPSet")
  93.  
  94. Call GetVersion
  95.  
  96. Request:
  97. MESS='   SOURCE: 'ESourceName||NL
  98. If VERSTAT=1 then MESS=MESS||'  VERSION: 'VERNAME VERSTR VERDATE||NL
  99. If ECOPTIONS~='' then MESS=MESS||'  OPTIONS:' ECOPTIONS||NL
  100. If ECDUPPATH~='ECDUPPATH' then MESS=MESS||'  DUPPATH:' ECDUPPATH||NL
  101. If EDChanges=0 then do
  102.    MESS=MESS||'   STATUS: UNCHANGED'
  103.    ECNOVER=''
  104. End
  105. Else MESS=MESS||'   STATUS: CHANGED'
  106. RTEZRequest(MESS,'_Compile|_BackUp|_RevUp|_FixUp|_NoBump|_?|_Quit','Info Source...',RTPAR)
  107. If RTResult=6 then do;Call DisplayHelp;Call Request;End
  108. If RTResult=5 then ECNOBUMP=''
  109. If RTResult=4 then do;ECNOBUMP='ECNOBUMP';ECNOVER='ECNOVER';End
  110. If RTResult=3 then do;ECBUMPREV='';ECNOVER='ECNOVER';End
  111. If RTResult=2 then do;Call MakeBackUp;Call Request;End
  112. If RTResult=0 then do;'BEG OF FILE';JumpTo CR_LINE+DISPLINES 0;JumpTo CR_LINE CR_COL;Exit;End
  113. If ECNOVER='ECNOVER' then do
  114.    VERDATE=CURRDATE
  115.    If ECBUMPREV~='ECBUMPREV' then do
  116.       If (Datatype(VERREV,'N')) then do
  117.          VERREV=VERREV+1
  118.          VERFIX=0
  119.       End
  120.    End
  121.    Else If (ECNOBUMP='ECNOBUMP')&(VERSTAT=1) then do
  122.       If (Datatype(VERFIX,'N')) then do
  123.          VERFIX=VERFIX+1
  124.       End
  125.    End
  126.    If VERSTAT=1 then Call PutVersion
  127.    Else do
  128.       RTEZRequest('"'ESourceName'"'||NL'have no version string, add this?'||NL'"'VERNAME VERSTR VERDATE'"','_Add|_No','Add Version String','rtez_flags=ezreqf_centertext' RTPAR)
  129.       If RTResult=1 then Call PutVersion
  130.    End
  131. End
  132. If (ECPPSET~='ECPPSET')&(VERSTAT=1) then Call PreProSet
  133. Save
  134.  
  135. DM 'Compiling E source...'
  136. Status 'taskaddress'
  137. TMPFile='T:'||Result||'.tmp'
  138. Address Command
  139. ECPath '>'TMPFile ESourceFile ECOptions ' Quiet'
  140. Address
  141.  
  142. Call CheckErrors
  143.  
  144. If VERSTAT=1 then do
  145.    CTEXT=VERNAME VERSTR VERDATE
  146.    Call AddComment(ESourceFile)
  147. End
  148. If ER_ERROR='ER_ERROR' then do
  149.    If ECCOMMENT~='ECCOMMENT' then do
  150.       IF VERSTAT=1 then CTEXT=VERNAME VERSTR VERDATE ECCOMMENT ; Else CTEXT=ECCOMMENT
  151.       Call AddComment(ESourceFilePref)
  152.    End
  153.    If ECDUPPATH~='ECDUPPATH'then Call CopyDuppFile
  154. End
  155.  
  156. DM
  157. MESS=' SOURCE:' ESourceName||NL
  158. If VERSTAT=1 then MESS=MESS||'VERSION:' VERNAME VERSTR VERDATE||NL
  159. If ECOPTIONS~='' then MESS=MESS||'OPTIONS:' ECOPTIONS||NL
  160. If ER_UNREF~='ER_UNREF' then MESS=MESS||'  UNREF:' ER_UNREF||NL
  161. If ER_ERROR~='ER_ERROR' then MESS=MESS||'  ERROR:' ER_ERROR||NL
  162. If ER_LINE~='ER_LINE' then MESS=MESS||'   LINE:' ER_LINE||NL
  163. If ER_TEXT~='ER_TEXT' then MESS=MESS||'   TEXT:' ER_TEXT||NL
  164. If ER_WITH~='ER_WITH' then MESS=MESS||'   WITH:' ER_WITH||NL
  165. If ER_ERROR='ER_ERROR' then do
  166.    MESS=MESS||' STATUS: OK'
  167.    'BEG OF FILE'
  168.    JumpTo CR_LINE+DISPLINES 0
  169.    JumpTo CR_LINE CR_COL
  170. End
  171. Else do
  172.    MESS=MESS||' STATUS: FAILED'
  173.    If ER_LINE~='ER_LINE' then do
  174.       'BEG OF FILE'
  175.       JumpTo ER_LINE+DISPLINES 0
  176.       JumpTo ER_LINE ER_COL
  177.    End
  178. End
  179. RTEZRequest(MESS,'_Ok','E Compile Result',RTPAR)
  180. DM
  181. Exit
  182.  
  183. /****************************************************************************/
  184.  
  185. GetOption: Procedure
  186. Arg KEYWORD
  187. "BEG OF FILE"
  188. SEARCH FOR "->"||KEYWORD 1 0 1 1
  189. If Result ~=0 then do
  190.    Status 'linebuffer'
  191.    Parse Var Result '->' OPTION TEMPLATE
  192.    TEMPLATE=Strip(Compress(TEMPLATE,'0A'X))
  193.    TEMPLATE=Compress(TEMPLATE,'"')
  194. End
  195. Else TEMPLATE=KEYWORD
  196. Return TEMPLATE
  197.  
  198. GetVersion:
  199. DM 'Scanning for version string...'
  200. "BEG OF FILE"
  201. SEARCH FOR "$VER:" 1 0 1 1
  202. If Result ~=0 then do
  203.    VERSTAT=1
  204.    Status 'cursorline'
  205.    VERLINE=Result+1
  206.    Status 'linebuffer'
  207.    Parse Var Result VERPRE'$VER:'VERNAME VERSTR'('VERDATE')'VERSUF
  208.    VERSTR=Strip(VERSTR)
  209.    Parse Var VERSTR VERVER'.'VERREV'.'VERFIX
  210.    If VERFIX="" then VERFIX=0
  211.    VERDATE='('VERDATE')'
  212. End 
  213. Else do
  214.    VERSTAT=0
  215.    "END OF FILE"
  216.    Status 'cursorline'
  217.    VERLINE=Result+1
  218.    VERPRE="VOID '"
  219.    VERNAME=(Left(ESourceName,Length(ESourceName)-2))
  220.    VERSTR='1.0'
  221.    VERVER=1
  222.    VERREV=0
  223.    VERFIX=0
  224.    VERDATE=CURRDATE
  225.    VERSUF="'"||NL
  226. End
  227. DM
  228. Return
  229.  
  230. PutVersion:
  231. VERSTR=VERVER'.'VERREV
  232. If VERFIX~=0 then VERSTR=VERSTR||'.'VERFIX
  233. If VERSTAT=1 then do
  234.    JumpTo VERLINE 1
  235.    "DELETE LINE"
  236.    End
  237.    Else do
  238.    JumpTo VERLINE 1
  239.    Status 'linebuffer'
  240.    If Result ~=NL then do
  241.       "END OF LINE"
  242.       TEXT NL
  243.    End
  244.    TEXT NL
  245. End
  246. TEXT VERPRE||'$VER:' VERNAME VERSTR VERDATE||VERSUF
  247. VERSTAT=1
  248. Return
  249.  
  250. CopyDuppFile:
  251. DM 'Making duplicate of exe file...'
  252. If Exists(ESourceFilePref) then do
  253.    Address Command
  254.    'C:Copy >NIL:' ESourceFilePref 'To "'ECDupPath'" Clone Quiet'
  255.    Address
  256. End
  257. Else RC=1
  258. If RC>0 then do
  259.    RTEZRequest('Copying of "Duplicate" file failed!!!','_Ok',,RTPAR)
  260. End
  261. DM
  262. Return
  263.  
  264. MakeBackUp:
  265. DM 'Making backup of source file...'
  266. If Exists(ESourceFile) then do
  267.    If VERSTAT=1 then do
  268.    BackUpName='_V'VERSTR'.ebak'
  269.    BackupName=Left(ESourceNamePref,Min(Length(ESourceNamePref),30-Length(BackupName)))||BackupName
  270.    End
  271.    Else BackupName=ESourceNamePref||'.ebak'
  272.    BackupName=rtfilerequest(ESourcePath,BackupName,'Save Source Backup...','_Save','rtfi_flags=freqf_save rt_pubscrname='CEDScreen)
  273.    If BackupName~='' then do
  274.       If Exists(BackupName) then do
  275.          RTEZRequest('"'BackupName'"'NL'already exists,overwrite?','_Yes|_No',,'rtez_flags=ezreqf_centertext' RTPAR)
  276.          If RTResult=0 then Return
  277.       End
  278.       Address Command
  279.       'C:Copy >NIL:' ESourceFile 'To' BackupName 'Clone Quiet'
  280.       Address
  281.    End
  282. End
  283. Else RC=1
  284. If RC>0 then do
  285.    RTEZRequest('Making a "BackUp" file failed!!!','_Ok',,RTPAR)
  286. End
  287. DM
  288. Return
  289.  
  290. CheckErrors:
  291. DM 'Checking for errors...'
  292. CLine=''
  293. If ~Open('File',TMPFile,'R') then do
  294.    RTEZRequest('Could not open "Error" file!!!','_Quit',,RTPAR)
  295.    DM
  296.    Exit
  297. End
  298. Do Until EOF('File')
  299.    CLine=ReadLn('File')
  300.    If Left(Cline,13)='UNREFERENCED:' then do
  301.       ER_UNREF=Strip(SubStr(CLine,14))
  302.    End
  303.    If Left(Cline,6)='ERROR:' then do
  304.       ER_ERROR=Strip(SubStr(CLine,7))
  305.    End
  306.    If Left(Cline,4)='LINE' then do
  307.       CPOS=Pos(':',Cline)
  308.       ER_LINE=Strip(SubStr(CLine,5,(CPOS-5)))
  309.       ER_TEXT=SubStr(Cline,(CPOS+1))
  310.       CPOS=Pos('',ER_TEXT)
  311.       ER_COL=CPOS-1
  312.       If CPOS>0 then do
  313.          ER_TEXT=Delstr(ER_TEXT,CPOS,8)
  314.          CPOS=Pos('',ER_TEXT)
  315.          If CPOS>0 then ER_TEXT=Delstr(ER_TEXT,CPOS,4)
  316.       End
  317.       ER_TEXT=Strip(ER_TEXT)
  318.       If Length(ER_TEXT)>60 then ER_TEXT=(Left(ER_TEXT,60)||'...')
  319.    End
  320.    If Left(Cline,5)='WITH:' then do
  321.       ER_WITH=Strip(SubStr(CLine,6))
  322.       If Length(ER_WITH)>60 then ER_WITH=(Left(ER_WITH,60)||'...')
  323.    End
  324. End
  325. Close('File')
  326. Address Command
  327. 'C:Delete >NIL:' TMPFile 'Quiet'
  328. Address
  329. DM
  330. Return
  331.  
  332. AddComment:
  333. DM 'Adding comment to file...'
  334. Arg CFILE
  335. If Exists(CFILE) then do
  336.    If Length(CTEXT)>79 then CTEXT=Left(CTEXT,79)
  337.    Address Command
  338.    'C:FileNote >NIL: File' CFILE 'Comment "'CTEXT'" Quiet'
  339.    Address
  340. End
  341. Else RC=1
  342. If RC>0 then do
  343.    RTEZRequest('Could not comment file!','_Ok',,RTPAR)
  344. End
  345. DM
  346. Return
  347.  
  348. PreProSet:
  349. DM "Scanning for define's..."
  350. MACRO=4
  351. MACRO.1='ECVERNAME' ;BODY.1=VERNAME
  352. MACRO.2='ECVERSHORT';BODY.2=VERVER'.'VERREV
  353. MACRO.3='ECVERLONG' ;BODY.3=VERVER'.'VERREV'.'VERFIX
  354. MACRO.4='ECVERDATE' ;BODY.4=VERDATE
  355. Do NUM=1 To MACRO
  356.    "BEG OF FILE"
  357.   "SEARCH FOR" '"#define '||MACRO.NUM'"' 1 0 1 1
  358.     If Result~=0 then do
  359.       Status 'cursorline'
  360.       DEFLINE=Result+1
  361.       Status 'linebuffer'
  362.       Parse Var Result DEFPRE'#define'DEFMACRO DEFSTR DEFSUF
  363.       DEFSUF=Compress(DEFSUF,'0A'X)
  364.       DEFMACRO=Compress(DEFMACRO,'0A'X)
  365.       DEFMACRO=Strip(DEFMACRO)
  366.       JumpTo DEFLINE 1
  367.       "DELETE TO EOL"
  368.       TEXT DEFPRE'#define' DEFMACRO "'"BODY.NUM"'"DEFSUF
  369.    End
  370. End
  371. DM
  372. Return
  373.  
  374. DisplayHelp:
  375.       MESS='                               ECompiler Script V2.11'||NL||NL
  376. MESS=MESS||'Options:'||NL
  377. MESS=MESS||'->ECOptions "OPTI DEBUG" :Sets the compiler options OPTI and DEBUG'||NL
  378. MESS=MESS||'->ECDupPath "Work:Ownprograms/" :Copy a clone of the exe file to Work:Ownprograms/'||NL
  379. MESS=MESS||'->ECNoVer :Turns off the version handling'||NL
  380. MESS=MESS||"->ECNoBump :Don't bump the version, but sets the date"||NL
  381. MESS=MESS||'->ECBumpRev :Bumps the revision'||NL
  382. MESS=MESS||'->ECComment "-By Me!" :Places -By Me! after verstring in the filenote on exe file'||NL
  383. MESS=MESS||'->ECPPSet :Makes the script set the defines if they exists'||NL
  384. MESS=MESS||"   #define ECVERNAME 'programname'"||NL
  385. MESS=MESS||"   #define ECVERSHORT 'ver.rev'"||NL
  386. MESS=MESS||"   #define ECVERLONG 'ver.rev.fixrev'"||NL
  387. MESS=MESS||"   #define ECVERDATE '(d.m.yy)'"||NL||NL
  388. MESS=MESS||'Send comments, questions and bugreports to: Johan Nilsson (jonils@algonet.se)'||NL
  389. MESS=MESS||'                    Copyright © 1996-97 Davinja Software'
  390. RTEZRequest(MESS,'_Ok','Info',RTPAR)
  391. Return
  392.